home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / misc / emu / ATUtilities.lha / ATUtilities / BASIC / INSTALL.BAS < prev    next >
BASIC Source File  |  2000-09-26  |  8KB  |  356 lines

  1. $STRING 1
  2. $INCLUDE "GEMDOS.INC"
  3. $INCLUDE "JANUS.INC"
  4.  
  5. %A6Low = %A6+1
  6. dim sektoren(5),tracks(5),heads(5),fat(5),sekProCluster(5),file(5)
  7.  
  8. if command$=GemDOS$ then
  9.  call PrepareScreen(20,"Disketten installieren")
  10. else
  11.  call InitScreen(20,"Disketten installieren")
  12. end if
  13.  
  14. test=CheckInt(29)
  15. if test=0 then
  16.  color 12
  17.  call Center(9,"Der Amiga-Treiber Disk Transfer wurde nicht gestartet!")
  18.  call Center(11,"Starten Sie Disk Transfer und versuchen Sie erneut,")
  19.  call Center(12,"dieses Programm aufzurufen!")
  20.  call BoolGadget(5,26,25,1,"Zurck zu AControl",1)
  21.  
  22.  call MouseOn
  23.  ende=0
  24.  while ende=0
  25.   call MouseDown
  26.   if mouse.button<>0 then call MouseHandler
  27.   if gad.num=1 or gad.num=33333 then
  28.    ende=1
  29.   end if
  30.   gad.num=-1
  31.  wend
  32.  call MouseOff
  33.  end
  34. end if
  35.  
  36. Feld2$(0)="Formatierung starten"
  37. Feld2$(1)="Voreinstellungen sichern"
  38. Feld2$(2)="-"
  39. Feld2$(3)="Information"
  40. Feld2$(4)="-"
  41. Feld2$(5)="Zurck zu AControl"
  42.  
  43. call BoolGadget(5,26,25,1,"Zurck zu AControl",1)
  44. call BoolGadget(5,19,15,1,"Formatieren",100)
  45. 19 error 0
  46. 20 open "install.dat" for input as #1
  47. if erl<>20 then
  48.  a=asc(input$(1,1))
  49.  b=asc(input$(1,1))
  50.  close #1
  51. else
  52.  b=1
  53.  a=0
  54. end if
  55. call ToggleGadget(5,21,15,1,"Quick",b,150)
  56. call ToggleGadget(5,23,15,1,"Verify",a,200)
  57. call DrawPBorder(23,19,52,5,"")
  58. call MenuGadget(6,"Datei",10000)
  59. call MenuGadget(20,"Laufwerk",10001)
  60. call ZeigeLaufwerke
  61. locate 20,25
  62. print "Aktuelle Spur: 0"
  63. locate 21,25
  64. print "Kommentar:     -"
  65. locate 23,26
  66. print "0 %"
  67. call DrawPBorder(30,22,43,1,"")
  68. call MouseOn
  69.  
  70. ende=0
  71. while ende=0
  72.  call MouseDown
  73.  if mouse.button<>0 then call MouseHandler
  74.  
  75.  if gad.num<>-1 then
  76.   if gad.num=1 or gad.num=33333 then
  77.    ende=1
  78.   elseif gad.num=10000 then
  79.    call MenuHandler(6,250,Feld2$(),6)
  80.    select case menu.num
  81.     case 0
  82.      call DiskFormatieren
  83.     case 1
  84. 9    error 0
  85. 10   open "install.dat" for output as #1
  86.      if erl<>10 then
  87.       print #1,chr$(gad.selected(4));chr$(gad.selected(3));
  88.       close #1
  89.      else
  90.       call Bell
  91.      end if
  92.     case 3
  93.      call InformationBox("Disketten-Installation - Version 1.0","Copyright (C) 1994 by","Thomas Dreibholz","All rights reserved.")
  94.     case 5
  95.      ende=1
  96.    end select
  97.   elseif gad.num=10001 then
  98.    call MenuHandler(20,250,Feld1$(),6)
  99.    if menu.num<>-1 then
  100.     call MouseOff
  101.     call DrawPBorder(5,6+drive*2,70,1,"")
  102.     call DrawNBorder(5,6+menu.num*2,70,1,"")
  103.     call MouseOn
  104.     drive=menu.num
  105.    end if
  106.   elseif gad.num=100 then
  107.    call DiskFormatieren
  108.   elseif gad.num>=10 and gad.num<=16 then
  109.    x=gad.num-10
  110.    call MouseOff
  111.    call DrawPBorder(5,6+drive*2,70,1,"")
  112.    call DrawNBorder(5,6+x*2,70,1,"")
  113.    call MouseOn
  114.    drive=x
  115.   end if
  116.  end if
  117.  
  118.  gad.num=-1
  119. wend
  120.  
  121. call MouseOff
  122. end
  123.  
  124. sub ZeigeLaufwerke shared
  125.  x=0
  126.  def seg = jint.segment
  127.  for i=0 to 5
  128.   call SelectDrive(i)
  129.   pokei jint.offset+%A1,5
  130.   call CallAndWait
  131.   if peeki(jint.offset+%A2)>0 then
  132.  
  133.    sektoren(i)=peeki(jint.offset+%A2)
  134.    tracks(i)=peeki(jint.offset+%A3)
  135.    heads(i)=peeki(jint.offset+%A4)
  136.    fat(i)=peeki(jint.offset+%A5)
  137.    sekProCluster(i)=peek(jint.offset+%A6Low)
  138.    file(i)=peeki(jint.offset+%A7)
  139.  
  140.    call MinGadget(5,6+i*2,70,1,10+i)
  141.    Feld1$(i)="Virtuelles Laufwerk"+str$(i+1)
  142.    if x=0 then
  143.     call DrawNBorder(5,6+i*2,70,1,"Virtuelles Laufwerk"+str$(i+1))
  144.     drive=i
  145.     x=1
  146.    else
  147.     call DrawPBorder(5,6+i*2,70,1,"Virtuelles Laufwerk"+str$(i+1))
  148.    end if
  149.   else
  150.    Feld1$(i)="Virtuelles Laufwerk"+str$(i+1)+chr$(0)
  151.    call DrawPBorder(5,6+i*2,70,1,"Virtuelles Laufwerk"+str$(i+1)+" wurde noch nicht definiert")
  152.   end if
  153.  next
  154. end sub
  155.  
  156. sub DiskFormatieren shared
  157.  dim okay(tracks(drive))
  158.  
  159.  if tracks(drive)=0 then exit sub
  160.  call MouseOff
  161.  def seg = jint.segment
  162.  call SelectDrive(drive)
  163.  locate 21,40
  164.  print "Formatiere virtuelles Laufwerk";drive+1
  165.  line (239,349)-(581,367),0,bf
  166.  if gad.selected(3)=1 and file(drive)=0 then
  167.   for i=0 to tracks(drive)-1
  168.    locate 20,39
  169.    print i;string$(8," ")
  170.    call FormatiereSpur(i)
  171.  
  172.    x=PEEKI(jint.offset+%A2)
  173.    if x<>0 then
  174.     if x=1 then t$="Nicht genug Amiga-Speicher!"
  175.     if x=2 then t$="Fehler beim Formatieren!"
  176.     if x=3 then t$="Fehlerhafte Spur ausgeklammert."
  177.     locate 21,40
  178.     print t$;string$(34-len(t$)," ")
  179.     if x=1 or x=2 then goto Fertig
  180.     okay(i)=1
  181.    else
  182.     okay(i)=0
  183.    end if
  184.  
  185.    ps=int((100*i)/(tracks(drive)-1))
  186.    locate 23,24
  187.    x$=str$(ps)+" %"
  188.    x$=x$+string$(6-len(x$)," ")
  189.    print x$
  190.    w=(342*ps)/100
  191.    line (239,349)-(239+w,367),14,bf
  192.   next
  193.  else
  194.   locate 20,39
  195.   print tracks(drive)-1;string$(8," ")
  196.   locate 23,25
  197.   print "100 %"
  198.   for i=0 to tracks(drive)-1
  199.    okay(i)=0
  200.   next
  201.  end if
  202.  call InstalliereFAT(okay())
  203.  if fatOkay=1 then
  204.   t$="Formatierung erfolgreich beendet!"
  205.   locate 21,40
  206.   print t$;string$(34-len(t$)," ")
  207.  end if
  208. Fertig:
  209.  call MouseOn
  210.  erase okay
  211. end sub
  212.  
  213. sub FormatiereSpur(spur) shared
  214.  if gad.selected(4)=1 then x=0 else x=1
  215.  call Format(spur,x)
  216. end sub
  217.  
  218. sub InstalliereFAT(okay()) shared
  219.  fatOkay=0
  220.  
  221.  fSektoren=sektoren(drive)
  222.  fHeads=heads(drive)
  223.  fTracks=tracks(drive)
  224.  fSekProCluster=sekProCluster(drive)
  225.  fFATSektoren=fat(drive)
  226.  
  227.  t$="FAT wird erstellt."
  228.  locate 21,40
  229.  print t$;string$(34-len(t$)," ")
  230.  
  231.  rem Boot-Sektor schreiben
  232.  poke jint.offset+&H00,0
  233.  poke jint.offset+&H01,0
  234.  poke jint.offset+&H02,0
  235.  i$="-TD- 2.0"
  236.  for i=0 TO 7
  237.   poke jint.offset+&H03+i,asc(mid$(i$,i+1,1))
  238.  next
  239.  pokei jint.offset+&H0B,512
  240.  poke  jint.offset+&H0D,fSekProCluster
  241.  pokei jint.offset+&H0E,1
  242.  poke  jint.offset+&H10,1
  243.  pokei jint.offset+&H11,112
  244.  pokei jint.offset+&H13,fSektoren
  245.  poke  jint.offset+&H15,&HF8
  246.  pokei jint.offset+&H16,fFATSektoren
  247.  pokei jint.offset+&H18,fSektoren/fTracks/fHeads
  248.  pokei jint.offset+&H1A,fHeads
  249.  pokei jint.offset+&H1C,1
  250.  for i=&H1E TO &HFF
  251.   poke jint.offset+i,0
  252.  next
  253.  call XWrite(0,1)
  254.  if peeki(jint.offset+%A2)<>0 then
  255.   call SFehler
  256.   exit sub
  257.  end if
  258.  
  259.  rem File Allocation Table schreiben
  260.  for i=0 to fFATSektoren*512
  261.   poke jint.offset+i,0
  262.  next
  263.  
  264.  if fSektoren>4096 then fat12=0 else fat12=1
  265.  
  266.  if fat12=1 then
  267.   poke jint.offset+0,&HFB
  268.   poke jint.offset+1,&HFF
  269.   poke jint.offset+2,&HFF
  270.   rem $F7 $7F $FF
  271.   for i=0 to fTracks-1
  272.    if okay(i)=1 then
  273.     for z=0 to (fSektoren/fTracks/fHeads)
  274.      sektor=i*(fSektoren/fTracks)+z
  275.      cluster=sektor/fSekProCluster
  276.      if (cluster mod 1)<>0 or (sektor mod 1)<>0 then
  277.       ?cluster,sektor
  278.       ?"ERROR"
  279.       end
  280.      end if
  281.      if (cluster mod 2)=0 then
  282.       position=3+cluster*1.5
  283.       poke jint.offset+position,&HF7
  284.       poke jint.offset+position+1,&HF
  285.      else
  286.       position=4+(cluster-1)*1.5
  287.       old=peek(jint.offset+position)
  288.       old=old+&H70
  289.       poke jint.offset+position,old
  290.       poke jint.offset+position+1,&HFF
  291.      end if
  292.     next
  293.    end if
  294.   next
  295.  else
  296.   pokei jint.offset+0,&HFFFB
  297.  end if
  298.  call XWrite(1,fFATSektoren)
  299.  if peeki(jint.offset+%A2)<>0 then
  300.   call SFehler
  301.   exit sub
  302.  end if
  303.  
  304.  rem Hauptverzeichnis
  305.  for i=0 to 2048
  306.   poke jint.offset+i,0
  307.  next
  308.  n$="EMPTY DISK "+CHR$(8)+CHR$(0)
  309.  for i=0 to 12
  310.   poke jint.offset+i,asc(mid$(n$,i+1,1))
  311.  next
  312.  call XWrite(fFATSektoren+1,4)
  313.  if peeki(jint.offset+%A2)<>0 then
  314.   call SFehler
  315.   exit sub
  316.  end if
  317.   call Update
  318.  if peeki(jint.offset+%A2)<>0 then
  319.   call SFehler
  320.   exit sub
  321.  end if
  322.  
  323.  fatOkay=1
  324. end sub
  325.  
  326. sub SFehler static
  327.  t$="Fehler beim Schreiben!"
  328.  locate 21,40
  329.  print t$;string$(34-len(t$)," ")
  330. end sub
  331.  
  332. sub XWrite(sektor,length) shared
  333.  pokei jint.offset+%A1,1
  334.  pokei jint.offset+%A2,length
  335.  pokei jint.offset+%A3,sektor
  336.  call CallAndWait
  337. end sub
  338.  
  339. sub Format(spur,xverify) shared
  340.  pokei jint.offset+%A1,10
  341.  pokei jint.offset+%A2,spur
  342.  pokei jint.offset+%A3,xverify
  343.  call CallAndWait
  344. end sub
  345.  
  346. sub Update shared
  347.  pokei jint.offset+%A1,3
  348.  call CallAndWait
  349. end sub
  350.  
  351. sub SelectDrive(num) shared
  352.  pokei jint.offset+%A1,100
  353.  pokei jint.offset+%A2,num
  354.  call CallAndWait
  355. end sub
  356.